From d116f2b58d2cbdafc61471fe1dc53ebc79db162e Mon Sep 17 00:00:00 2001 From: "djm@kirby.fc.hp.com" Date: Mon, 2 May 2005 17:34:28 +0000 Subject: [PATCH] bitkeeper revision 1.1327.1.19 (427664a4ddicjiXeRHKCKKrSnBvjug) Last round of cleanup (for now) --- .rootkeys | 1 - xen/arch/ia64/Makefile | 2 +- xen/arch/ia64/patch/linux-2.6.11/page.h | 58 ++--- xen/arch/ia64/patch/linux-2.6.11/pgalloc.h | 68 +++--- xen/arch/ia64/patch/linux-2.6.11/setup.c | 210 ++++------------ xen/arch/ia64/patch/linux-2.6.11/swiotlb.c | 77 ------ xen/arch/ia64/patch/linux-2.6.11/system.h | 24 +- xen/arch/ia64/patch/linux-2.6.11/time.c | 272 ++------------------- xen/arch/ia64/patch/linux-2.6.11/tlb.c | 27 +- xen/arch/ia64/tools/mkbuildtree | 16 +- xen/arch/ia64/xenmisc.c | 8 +- xen/arch/ia64/xensetup.c | 9 +- xen/include/asm-ia64/config.h | 24 +- 13 files changed, 168 insertions(+), 628 deletions(-) delete mode 100644 xen/arch/ia64/patch/linux-2.6.11/swiotlb.c diff --git a/.rootkeys b/.rootkeys index f24cbca0ed..c6b829b733 100644 --- a/.rootkeys +++ b/.rootkeys @@ -1100,7 +1100,6 @@ 425ae516EWaNOBEnc1xnphTbRmNZsw xen/arch/ia64/patch/linux-2.6.11/processor.h 425ae516LecDyXlwh3NLBtHZKXmMcA xen/arch/ia64/patch/linux-2.6.11/series 425ae516RFiPn2CGkpJ21LM-1lJcQg xen/arch/ia64/patch/linux-2.6.11/setup.c -425ae516FX_10YaKGMU8Ysf7kkdm_A xen/arch/ia64/patch/linux-2.6.11/swiotlb.c 425ae516p4ICTkjqNYEfYFxqULj4dw xen/arch/ia64/patch/linux-2.6.11/system.h 425ae516juUB257qrwUdsL9AsswrqQ xen/arch/ia64/patch/linux-2.6.11/time.c 425ae5167zQn7zYcgKtDUDX2v-e8mw xen/arch/ia64/patch/linux-2.6.11/tlb.c diff --git a/xen/arch/ia64/Makefile b/xen/arch/ia64/Makefile index 85d817079a..36d7b845b3 100644 --- a/xen/arch/ia64/Makefile +++ b/xen/arch/ia64/Makefile @@ -7,7 +7,7 @@ OBJS = xensetup.o setup.o time.o irq.o ia64_ksyms.o process.o smp.o \ machvec.o dom0_ops.o domain.o \ idle0_task.o pal.o hpsim.o efi.o efi_stub.o ivt.o mm_contig.o \ xenmem.o sal.o cmdline.o mm_init.o tlb.o smpboot.o \ - extable.o linuxextable.o xenirq.o \ + extable.o linuxextable.o xenirq.o xentime.o \ regionreg.o entry.o unaligned.o privop.o vcpu.o \ irq_ia64.o irq_lsapic.o vhpt.o xenasm.o dom_fw.o # perfmon.o diff --git a/xen/arch/ia64/patch/linux-2.6.11/page.h b/xen/arch/ia64/patch/linux-2.6.11/page.h index 67016a5366..cd6b281224 100644 --- a/xen/arch/ia64/patch/linux-2.6.11/page.h +++ b/xen/arch/ia64/patch/linux-2.6.11/page.h @@ -1,52 +1,34 @@ - page.h | 42 +++++++++++++++++++++++++++++++++++++++--- - 1 files changed, 39 insertions(+), 3 deletions(-) - -Index: linux-2.6.11-xendiffs/include/asm-ia64/page.h -=================================================================== ---- linux-2.6.11-xendiffs.orig/include/asm-ia64/page.h 2005-04-06 22:58:07.597539393 -0500 -+++ linux-2.6.11-xendiffs/include/asm-ia64/page.h 2005-04-06 23:06:15.908576975 -0500 -@@ -12,6 +12,9 @@ - #include - #include - -+#ifndef __ASSEMBLY__ -+#include -+#endif - /* - * PAGE_SHIFT determines the actual kernel page size. - */ -@@ -95,9 +98,11 @@ extern int ia64_pfn_valid (unsigned long +--- ../../linux-2.6.11/include/asm-ia64/page.h 2005-03-02 00:37:48.000000000 -0700 ++++ include/asm-ia64/page.h 2005-05-02 11:25:33.000000000 -0600 +@@ -95,9 +95,15 @@ #endif #ifndef CONFIG_DISCONTIGMEM +#ifdef XEN -+#define pfn_valid(pfn) (0) ++# define pfn_valid(pfn) (0) ++# define page_to_pfn(_page) ((unsigned long)((_page) - frame_table)) ++# define pfn_to_page(_pfn) (frame_table + (_pfn)) +#else # define pfn_valid(pfn) (((pfn) < max_mapnr) && ia64_pfn_valid(pfn)) --# define page_to_pfn(page) ((unsigned long) (page - mem_map)) --# define pfn_to_page(pfn) (mem_map + (pfn)) + # define page_to_pfn(page) ((unsigned long) (page - mem_map)) + # define pfn_to_page(pfn) (mem_map + (pfn)) +#endif #else extern struct page *vmem_map; extern unsigned long max_low_pfn; -@@ -106,9 +111,15 @@ extern unsigned long max_low_pfn; - # define pfn_to_page(pfn) (vmem_map + (pfn)) - #endif - --#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) -+#define page_to_pfn(_page) ((unsigned long)((_page) - frame_table)) -+#define page_to_virt(_page) phys_to_virt(page_to_phys(_page)) -+ -+#define page_to_phys(_page) (page_to_pfn(_page) << PAGE_SHIFT) +@@ -109,6 +115,11 @@ + #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) -+#define pfn_to_page(_pfn) (frame_table + (_pfn)) ++#ifdef XEN ++#define page_to_virt(_page) phys_to_virt(page_to_phys(_page)) +#define phys_to_page(kaddr) pfn_to_page(((kaddr) >> PAGE_SHIFT)) ++#endif + typedef union ia64_va { struct { unsigned long off : 61; /* intra-region offset */ -@@ -124,8 +135,25 @@ typedef union ia64_va { +@@ -124,8 +135,23 @@ * expressed in this way to ensure they result in a single "dep" * instruction. */ @@ -63,8 +45,6 @@ Index: linux-2.6.11-xendiffs/include/asm-ia64/page.h +// xen/drivers/console.c uses __va in a declaration (should be fixed!) +#define __pa(x) ({xen_va _v; _v.l = (long) (x); _v.f.reg = 0; _v.l;}) +#define __va(x) ({xen_va _v; _v.l = (long) (x); _v.f.reg = -1; _v.p;}) -+//# define __pa(x) ((unsigned long)(((unsigned long)x) - PAGE_OFFSET)) -+//# define __va(x) ((void *)((char *)(x) + PAGE_OFFSET)) +#else #define __pa(x) ({ia64_va _v; _v.l = (long) (x); _v.f.reg = 0; _v.l;}) #define __va(x) ({ia64_va _v; _v.l = (long) (x); _v.f.reg = -1; _v.p;}) @@ -72,7 +52,7 @@ Index: linux-2.6.11-xendiffs/include/asm-ia64/page.h #define REGION_NUMBER(x) ({ia64_va _v; _v.l = (long) (x); _v.f.reg;}) #define REGION_OFFSET(x) ({ia64_va _v; _v.l = (long) (x); _v.f.off;}) -@@ -197,11 +225,19 @@ get_order (unsigned long size) +@@ -197,7 +223,11 @@ # define __pgprot(x) (x) #endif /* !STRICT_MM_TYPECHECKS */ @@ -84,11 +64,3 @@ Index: linux-2.6.11-xendiffs/include/asm-ia64/page.h #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC | \ - (((current->personality & READ_IMPLIES_EXEC) != 0) \ - ? VM_EXEC : 0)) - -+#ifdef XEN -+#define __flush_tlb() do {} while(0); -+#endif -+ - #endif /* _ASM_IA64_PAGE_H */ diff --git a/xen/arch/ia64/patch/linux-2.6.11/pgalloc.h b/xen/arch/ia64/patch/linux-2.6.11/pgalloc.h index 17df69771f..be8e0bdd42 100644 --- a/xen/arch/ia64/patch/linux-2.6.11/pgalloc.h +++ b/xen/arch/ia64/patch/linux-2.6.11/pgalloc.h @@ -1,78 +1,72 @@ - pgalloc.h | 17 +++++++++++------ - 1 files changed, 11 insertions(+), 6 deletions(-) - -Index: linux-2.6.11-xendiffs/include/asm-ia64/pgalloc.h -=================================================================== ---- linux-2.6.11-xendiffs.orig/include/asm-ia64/pgalloc.h 2005-04-08 11:57:30.909774800 -0500 -+++ linux-2.6.11-xendiffs/include/asm-ia64/pgalloc.h 2005-04-08 11:58:08.102711219 -0500 -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include - - #include -@@ -34,6 +35,10 @@ - #define pmd_quicklist (local_cpu_data->pmd_quick) - #define pgtable_cache_size (local_cpu_data->pgtable_cache_sz) - -+/* FIXME: Later 3 level page table should be over, to create -+ * new interface upon xen memory allocator. To simplify first -+ * effort moving to xen allocator, use xenheap pages temporarily. -+ */ - static inline pgd_t* - pgd_alloc_one_fast (struct mm_struct *mm) - { -@@ -61,7 +66,7 @@ pgd_alloc (struct mm_struct *mm) +--- ../../linux-2.6.11/include/asm-ia64/pgalloc.h 2005-03-02 00:37:31.000000000 -0700 ++++ include/asm-ia64/pgalloc.h 2005-04-29 17:09:20.000000000 -0600 +@@ -61,7 +61,11 @@ pgd_t *pgd = pgd_alloc_one_fast(mm); if (unlikely(pgd == NULL)) { -- pgd = (pgd_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO); ++#ifdef XEN + pgd = (pgd_t *)alloc_xenheap_page(); ++#else + pgd = (pgd_t *)__get_free_page(GFP_KERNEL|__GFP_ZERO); ++#endif } return pgd; } -@@ -104,7 +109,7 @@ pmd_alloc_one_fast (struct mm_struct *mm +@@ -104,7 +108,11 @@ static inline pmd_t* pmd_alloc_one (struct mm_struct *mm, unsigned long addr) { -- pmd_t *pmd = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); ++#ifdef XEN + pmd_t *pmd = (pmd_t *)alloc_xenheap_page(); ++#else + pmd_t *pmd = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); ++#endif return pmd; } -@@ -136,7 +141,7 @@ pmd_populate_kernel (struct mm_struct *m +@@ -136,7 +144,11 @@ static inline struct page * pte_alloc_one (struct mm_struct *mm, unsigned long addr) { -- struct page *pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0); ++#ifdef XEN + struct page *pte = alloc_xenheap_page(); ++#else + struct page *pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0); ++#endif return pte; } -@@ -144,7 +149,7 @@ pte_alloc_one (struct mm_struct *mm, uns +@@ -144,7 +156,11 @@ static inline pte_t * pte_alloc_one_kernel (struct mm_struct *mm, unsigned long addr) { -- pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); ++#ifdef XEN + pte_t *pte = (pte_t *)alloc_xenheap_page(); ++#else + pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); ++#endif return pte; } -@@ -152,13 +157,13 @@ pte_alloc_one_kernel (struct mm_struct * +@@ -152,13 +168,21 @@ static inline void pte_free (struct page *pte) { -- __free_page(pte); ++#ifdef XEN + free_xenheap_page(pte); ++#else + __free_page(pte); ++#endif } static inline void pte_free_kernel (pte_t *pte) { -- free_page((unsigned long) pte); ++#ifdef XEN + free_xenheap_page((unsigned long) pte); ++#else + free_page((unsigned long) pte); ++#endif } #define __pte_free_tlb(tlb, pte) tlb_remove_page((tlb), (pte)) diff --git a/xen/arch/ia64/patch/linux-2.6.11/setup.c b/xen/arch/ia64/patch/linux-2.6.11/setup.c index 2b95625f90..5d7afce326 100644 --- a/xen/arch/ia64/patch/linux-2.6.11/setup.c +++ b/xen/arch/ia64/patch/linux-2.6.11/setup.c @@ -1,191 +1,96 @@ - setup.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++------------- - 1 files changed, 58 insertions(+), 14 deletions(-) - -Index: linux-2.6.11-xendiffs/arch/ia64/kernel/setup.c -=================================================================== ---- linux-2.6.11-xendiffs.orig/arch/ia64/kernel/setup.c 2005-04-07 17:44:13.294980153 -0500 -+++ linux-2.6.11-xendiffs/arch/ia64/kernel/setup.c 2005-04-07 17:46:37.157717072 -0500 -@@ -21,6 +21,9 @@ - #include - - #include -+#ifdef XEN -+#include -+#endif - #include - #include - #include -@@ -30,13 +33,17 @@ - #include - #include - #include -+#ifndef XEN - #include - #include - #include -+#endif - #include - #include +--- ../../linux-2.6.11/arch/ia64/kernel/setup.c 2005-03-02 00:37:49.000000000 -0700 ++++ arch/ia64/setup.c 2005-05-02 10:04:03.000000000 -0600 +@@ -127,7 +127,16 @@ + range_end = min(end, rsvd_region[i].start); -+#ifndef XEN - #include -+#endif - #include - #include - #include -@@ -51,6 +58,12 @@ - #include - #include - #include + if (range_start < range_end) +#ifdef XEN -+#include -+#include -+extern unsigned long loops_per_jiffy; // from linux/init/main.c -+char saved_command_line[COMMAND_LINE_SIZE]; // from linux/init/main.c -+#endif - - #if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE) - # error "struct cpuinfo_ia64 too big!" -@@ -66,7 +79,9 @@ DEFINE_PER_CPU(unsigned long, local_per_ - DEFINE_PER_CPU(unsigned long, ia64_phys_stacked_size_p8); - unsigned long ia64_cycles_per_usec; - struct ia64_boot_param *ia64_boot_param; -+#ifndef XEN - struct screen_info screen_info; -+#endif - - unsigned long ia64_max_cacheline_size; - unsigned long ia64_iobase; /* virtual address for I/O accesses */ -@@ -95,7 +110,6 @@ EXPORT_SYMBOL(ia64_max_iommu_merge_mask) - struct rsvd_region rsvd_region[IA64_MAX_RSVD_REGIONS + 1]; - int num_rsvd_regions; - -- - /* - * Filter incoming memory segments based on the primitive map created from the boot - * parameters. Segments contained in the map are removed from the memory ranges. A -@@ -125,9 +139,12 @@ filter_rsvd_memory (unsigned long start, - for (i = 0; i < num_rsvd_regions; ++i) { - range_start = max(start, prev_start); - range_end = min(end, rsvd_region[i].start); -- -- if (range_start < range_end) -- call_pernode_memory(__pa(range_start), range_end - range_start, func); ++ { + /* init_boot_pages requires "ps, pe" */ -+ if (range_start < range_end) { + printk("Init boot pages: 0x%lx -> 0x%lx.\n", + __pa(range_start), __pa(range_end)); + (*func)(__pa(range_start), __pa(range_end), 0); + } ++#else + call_pernode_memory(__pa(range_start), range_end - range_start, func); ++#endif /* nothing more available in this segment */ if (range_end == end) return 0; -@@ -184,17 +201,17 @@ reserve_memory (void) - + strlen(__va(ia64_boot_param->command_line)) + 1); +@@ -185,7 +194,12 @@ n++; -+ /* Reserve xen image/bitmap/xen-heap */ rsvd_region[n].start = (unsigned long) ia64_imva((void *)KERNEL_START); -- rsvd_region[n].end = (unsigned long) ia64_imva(_end); ++#ifdef XEN ++ /* Reserve xen image/bitmap/xen-heap */ + rsvd_region[n].end = rsvd_region[n].start + xenheap_size; ++#else + rsvd_region[n].end = (unsigned long) ia64_imva(_end); ++#endif n++; --#ifdef CONFIG_BLK_DEV_INITRD -+ /* This is actually dom0 image */ - if (ia64_boot_param->initrd_start) { - rsvd_region[n].start = (unsigned long)__va(ia64_boot_param->initrd_start); - rsvd_region[n].end = rsvd_region[n].start + ia64_boot_param->initrd_size; - n++; - } --#endif - - /* end of memory marker */ - rsvd_region[n].start = ~0UL; -@@ -204,6 +221,16 @@ reserve_memory (void) - num_rsvd_regions = n; - - sort_regions(rsvd_region, num_rsvd_regions); -+ -+ { -+ int i; -+ printk("Reserved regions: \n"); -+ for (i = 0; i < num_rsvd_regions; i++) -+ printk(" [%d] -> [0x%lx, 0x%lx]\n", -+ i, -+ rsvd_region[i].start, -+ rsvd_region[i].end); -+ } + #ifdef CONFIG_BLK_DEV_INITRD +@@ -299,7 +313,11 @@ } - /** -@@ -298,18 +325,17 @@ mark_bsp_online (void) - #endif - } - -+#ifdef XEN void __init --setup_arch (char **cmdline_p) ++#ifdef XEN +early_setup_arch (char **cmdline_p) ++#else + setup_arch (char **cmdline_p) ++#endif { unw_init(); -- ia64_patch_vtop((u64) __start___vtop_patchlist, (u64) __end___vtop_patchlist); -- +@@ -308,8 +326,14 @@ *cmdline_p = __va(ia64_boot_param->command_line); strlcpy(saved_command_line, *cmdline_p, COMMAND_LINE_SIZE); -+ cmdline_parse(*cmdline_p); ++#ifdef XEN ++ cmdline_parse(*cmdline_p); ++#undef CONFIG_ACPI_BOOT ++#endif efi_init(); -- io_port_init(); ++#ifndef XEN + io_port_init(); ++#endif #ifdef CONFIG_IA64_GENERIC { -@@ -339,6 +365,10 @@ setup_arch (char **cmdline_p) - if (early_console_setup(*cmdline_p) == 0) - mark_bsp_online(); - -+#ifdef XEN -+#undef CONFIG_ACPI_BOOT -+#endif -+ - #ifdef CONFIG_ACPI_BOOT - /* Initialize the ACPI boot-time table parser */ - acpi_table_init(); -@@ -350,9 +380,13 @@ setup_arch (char **cmdline_p) - smp_build_cpu_map(); /* happens, e.g., with the Ski simulator */ +@@ -351,8 +375,17 @@ # endif #endif /* CONFIG_APCI_BOOT */ + ++#ifndef XEN + find_memory(); ++#else + io_port_init(); +} -+#endif -- find_memory(); -- +void __init -+setup_arch (void) ++late_setup_arch (char **cmdline_p) +{ ++#undef CONFIG_ACPI_BOOT ++#endif /* process SAL system table: */ ia64_sal_init(efi.sal_systab); -@@ -388,7 +422,6 @@ setup_arch (char **cmdline_p) - if (!strstr(saved_command_line, "nomca")) - ia64_mca_init(); - -- platform_setup(cmdline_p); - paging_init(); +@@ -492,12 +525,14 @@ + { } -@@ -448,6 +481,9 @@ show_cpuinfo (struct seq_file *m, void * - sprintf(cp, " 0x%lx", mask); - } - -+#ifdef XEN -+#define seq_printf(a,b...) printf(b) ++#ifndef XEN + struct seq_operations cpuinfo_op = { + .start = c_start, + .next = c_next, + .stop = c_stop, + .show = show_cpuinfo + }; +#endif - seq_printf(m, - "processor : %d\n" - "vendor : %s\n" -@@ -659,11 +695,17 @@ cpu_init (void) + + void + identify_cpu (struct cpuinfo_ia64 *c) +@@ -659,7 +694,11 @@ | IA64_DCR_DA | IA64_DCR_DD | IA64_DCR_LC)); atomic_inc(&init_mm.mm_count); current->active_mm = &init_mm; @@ -197,18 +102,3 @@ Index: linux-2.6.11-xendiffs/arch/ia64/kernel/setup.c BUG(); ia64_mmu_init(ia64_imva(cpu_data)); -+#ifndef XEN - ia64_mca_cpu_init(ia64_imva(cpu_data)); -+#endif - - #ifdef CONFIG_IA32_SUPPORT - ia32_cpu_init(); -@@ -711,6 +753,8 @@ cpu_init (void) - void - check_bugs (void) - { -+#ifndef XEN - ia64_patch_mckinley_e9((unsigned long) __start___mckinley_e9_bundles, - (unsigned long) __end___mckinley_e9_bundles); -+#endif - } diff --git a/xen/arch/ia64/patch/linux-2.6.11/swiotlb.c b/xen/arch/ia64/patch/linux-2.6.11/swiotlb.c deleted file mode 100644 index 77fff5e2ec..0000000000 --- a/xen/arch/ia64/patch/linux-2.6.11/swiotlb.c +++ /dev/null @@ -1,77 +0,0 @@ - swiotlb.c | 21 +++++++++++++-------- - 1 files changed, 13 insertions(+), 8 deletions(-) - -Index: linux-2.6.11-xendiffs/arch/ia64/lib/swiotlb.c -=================================================================== ---- linux-2.6.11-xendiffs.orig/arch/ia64/lib/swiotlb.c 2005-04-08 12:13:54.040202667 -0500 -+++ linux-2.6.11-xendiffs/arch/ia64/lib/swiotlb.c 2005-04-08 12:19:09.170367318 -0500 -@@ -124,8 +124,11 @@ swiotlb_init_with_default_size (size_t d - /* - * Get IO TLB memory from the low pages - */ -- io_tlb_start = alloc_bootmem_low_pages(io_tlb_nslabs * -- (1 << IO_TLB_SHIFT)); -+ /* FIXME: Do we really need swiotlb in HV? If all memory trunks -+ * presented to guest as <4G, are actually <4G in machine range, -+ * no DMA intevention from HV... -+ */ -+ io_tlb_start = alloc_xenheap_pages(get_order(io_tlb_nslabs * (1 << IO_TLB_SHIFT))); - if (!io_tlb_start) - panic("Cannot allocate SWIOTLB buffer"); - io_tlb_end = io_tlb_start + io_tlb_nslabs * (1 << IO_TLB_SHIFT); -@@ -135,16 +138,16 @@ swiotlb_init_with_default_size (size_t d - * to find contiguous free memory regions of size up to IO_TLB_SEGSIZE - * between io_tlb_start and io_tlb_end. - */ -- io_tlb_list = alloc_bootmem(io_tlb_nslabs * sizeof(int)); -+ io_tlb_list = alloc_xenheap_pages(get_order(io_tlb_nslabs * sizeof(int))); - for (i = 0; i < io_tlb_nslabs; i++) - io_tlb_list[i] = IO_TLB_SEGSIZE - OFFSET(i, IO_TLB_SEGSIZE); - io_tlb_index = 0; -- io_tlb_orig_addr = alloc_bootmem(io_tlb_nslabs * sizeof(char *)); -+ io_tlb_orig_addr = alloc_xenheap_pages(get_order(io_tlb_nslabs * sizeof(char *))); - - /* - * Get the overflow emergency buffer - */ -- io_tlb_overflow_buffer = alloc_bootmem_low(io_tlb_overflow); -+ io_tlb_overflow_buffer = alloc_xenheap_pages(get_order(io_tlb_overflow)); - printk(KERN_INFO "Placing software IO TLB between 0x%lx - 0x%lx\n", - virt_to_phys(io_tlb_start), virt_to_phys(io_tlb_end)); - } -@@ -328,13 +331,13 @@ swiotlb_alloc_coherent(struct device *hw - */ - flags |= GFP_DMA; - -- ret = (void *)__get_free_pages(flags, order); -+ ret = (void *)alloc_xenheap_pages(get_order(size)); - if (ret && address_needs_mapping(hwdev, virt_to_phys(ret))) { - /* - * The allocated memory isn't reachable by the device. - * Fall back on swiotlb_map_single(). - */ -- free_pages((unsigned long) ret, order); -+ free_xenheap_pages((unsigned long) ret, order); - ret = NULL; - } - if (!ret) { -@@ -372,7 +375,7 @@ swiotlb_free_coherent(struct device *hwd - { - if (!(vaddr >= (void *)io_tlb_start - && vaddr < (void *)io_tlb_end)) -- free_pages((unsigned long) vaddr, get_order(size)); -+ free_xenheap_pages((unsigned long) vaddr, get_order(size)); - else - /* DMA_TO_DEVICE to avoid memcpy in unmap_single */ - swiotlb_unmap_single (hwdev, dma_handle, size, DMA_TO_DEVICE); -@@ -388,8 +391,10 @@ swiotlb_full(struct device *dev, size_t - * When the mapping is small enough return a static buffer to limit - * the damage, or panic when the transfer is too big. - */ -+#ifndef XEN - printk(KERN_ERR "PCI-DMA: Out of SW-IOMMU space for %lu bytes at " - "device %s\n", size, dev ? dev->bus_id : "?"); -+#endif - - if (size > io_tlb_overflow && do_panic) { - if (dir == PCI_DMA_FROMDEVICE || dir == PCI_DMA_BIDIRECTIONAL) diff --git a/xen/arch/ia64/patch/linux-2.6.11/system.h b/xen/arch/ia64/patch/linux-2.6.11/system.h index 032c47f80d..e31d332c2b 100644 --- a/xen/arch/ia64/patch/linux-2.6.11/system.h +++ b/xen/arch/ia64/patch/linux-2.6.11/system.h @@ -1,16 +1,10 @@ - system.h | 15 +++++++++++++++ - 1 files changed, 15 insertions(+) - -Index: linux-2.6.11-xendiffs/include/asm-ia64/system.h -=================================================================== ---- linux-2.6.11-xendiffs.orig/include/asm-ia64/system.h 2005-04-07 10:39:11.066701457 -0500 -+++ linux-2.6.11-xendiffs/include/asm-ia64/system.h 2005-04-07 10:40:19.540544127 -0500 -@@ -24,8 +24,16 @@ +--- ../../linux-2.6.11/include/asm-ia64/system.h 2005-03-02 00:38:07.000000000 -0700 ++++ include/asm-ia64/system.h 2005-05-02 10:18:30.000000000 -0600 +@@ -24,8 +24,15 @@ * 0xa000000000000000+2*PERCPU_PAGE_SIZE * - 0xa000000000000000+3*PERCPU_PAGE_SIZE remain unmapped (guard page) */ +#ifdef XEN -+//#define KERNEL_START 0xf000000100000000 +#define KERNEL_START 0xf000000004000000 +#define PERCPU_ADDR 0xf100000000000000-PERCPU_PAGE_SIZE +#define SHAREDINFO_ADDR 0xf100000000000000 @@ -22,7 +16,7 @@ Index: linux-2.6.11-xendiffs/include/asm-ia64/system.h #ifndef __ASSEMBLY__ -@@ -218,9 +226,13 @@ extern void ia64_load_extra (struct task +@@ -218,9 +225,13 @@ # define PERFMON_IS_SYSWIDE() (0) #endif @@ -36,13 +30,3 @@ Index: linux-2.6.11-xendiffs/include/asm-ia64/system.h #define __switch_to(prev,next,last) do { \ if (IA64_HAS_EXTRA_STATE(prev)) \ -@@ -249,6 +261,9 @@ extern void ia64_load_extra (struct task - #else - # define switch_to(prev,next,last) __switch_to(prev, next, last) - #endif -+//#ifdef XEN -+//#undef switch_to -+//#endif - - /* - * On IA-64, we don't want to hold the runqueue's lock during the low-level context-switch, diff --git a/xen/arch/ia64/patch/linux-2.6.11/time.c b/xen/arch/ia64/patch/linux-2.6.11/time.c index 8df14e4311..9e480b969e 100644 --- a/xen/arch/ia64/patch/linux-2.6.11/time.c +++ b/xen/arch/ia64/patch/linux-2.6.11/time.c @@ -1,259 +1,32 @@ --- ../../linux-2.6.11/arch/ia64/kernel/time.c 2005-03-02 00:37:50.000000000 -0700 -+++ arch/ia64/time.c 2005-04-28 14:29:58.000000000 -0600 -@@ -10,16 +10,22 @@ - */ - #include - -+#ifndef XEN - #include -+#endif - #include - #include - #include -+#ifndef XEN - #include -+#endif - #include - #include - #include - #include -+#ifndef XEN - #include -+#endif - #include - - #include -@@ -29,10 +35,19 @@ ++++ arch/ia64/time.c 2005-05-02 11:19:29.000000000 -0600 +@@ -29,6 +29,9 @@ #include #include #include +#ifdef XEN -+#include ++#include // not included by xen/sched.h +#endif extern unsigned long wall_jiffies; -+#ifndef XEN - u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES; -+#else -+#define INITIAL_JIFFIES 0 -+u64 jiffies_64 = INITIAL_JIFFIES; -+#define CPU_PROFILING 0 -+#endif - - EXPORT_SYMBOL(jiffies_64); - -@@ -45,33 +60,155 @@ +@@ -45,6 +48,7 @@ #endif -+#ifdef XEN -+volatile unsigned long last_nsec_offset; -+extern seqlock_t xtime_lock; -+unsigned long cpu_khz; /* Detected as we calibrate the TSC */ -+static s_time_t stime_irq; /* System time at last 'time update' */ -+ -+static inline u64 get_time_delta(void) -+{ -+ return ia64_get_itc(); -+} -+ -+s_time_t get_s_time(void) -+{ -+ s_time_t now; -+ unsigned long flags; -+ -+ read_lock_irqsave(&xtime_lock, flags); -+ -+ now = stime_irq + get_time_delta(); -+ -+ /* Ensure that the returned system time is monotonically increasing. */ -+ { -+ static s_time_t prev_now = 0; -+ if ( unlikely(now < prev_now) ) -+ now = prev_now; -+ prev_now = now; -+ } -+ -+ read_unlock_irqrestore(&xtime_lock, flags); -+ -+ return now; -+} -+ -+void update_dom_time(struct exec_domain *ed) -+{ -+// FIXME: implement this? -+// printf("update_dom_time: called, not implemented, skipping\n"); -+ return; -+} -+ -+/* Set clock to after 00:00:00 UTC, 1 January, 1970. */ -+void do_settime(unsigned long secs, unsigned long usecs, u64 system_time_base) -+{ -+// FIXME: Should this be do_settimeofday (from linux)??? -+ printf("do_settime: called, not implemented, stopping\n"); -+ dummy(); -+} -+#endif -+ -+#if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -+#endif /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ -+ +#ifndef XEN static struct time_interpolator itc_interpolator = { .shift = 16, .mask = 0xffffffffffffffffLL, - .source = TIME_SOURCE_CPU - }; -+#endif -+ -+#ifdef XEN -+unsigned long domain0_ready = 0; // FIXME (see below) -+#define typecheck(a,b) 1 -+/* FROM linux/include/linux/jiffies.h */ -+/* -+ * These inlines deal with timer wrapping correctly. You are -+ * strongly encouraged to use them -+ * 1. Because people otherwise forget -+ * 2. Because if the timer wrap changes in future you won't have to -+ * alter your driver code. -+ * -+ * time_after(a,b) returns true if the time a is after time b. -+ * -+ * Do this with "<0" and ">=0" to only test the sign of the result. A -+ * good compiler would generate better code (and a really good compiler -+ * wouldn't care). Gcc is currently neither. -+ */ -+#define time_after(a,b) \ -+ (typecheck(unsigned long, a) && \ -+ typecheck(unsigned long, b) && \ -+ ((long)(b) - (long)(a) < 0)) -+#define time_before(a,b) time_after(b,a) -+ -+#define time_after_eq(a,b) \ -+ (typecheck(unsigned long, a) && \ -+ typecheck(unsigned long, b) && \ -+ ((long)(a) - (long)(b) >= 0)) -+#define time_before_eq(a,b) time_after_eq(b,a) -+#endif - - static irqreturn_t - timer_interrupt (int irq, void *dev_id, struct pt_regs *regs) - { - unsigned long new_itm; - -+#ifndef XEN - if (unlikely(cpu_is_offline(smp_processor_id()))) { - return IRQ_HANDLED; - } -+#endif -+#ifdef XEN -+ if (current->domain == dom0) { -+ // FIXME: there's gotta be a better way of doing this... -+ // We have to ensure that domain0 is launched before we -+ // call vcpu_timer_expired on it -+ //domain0_ready = 1; // moved to xensetup.c -+ current->vcpu_info->arch.pending_interruption = 1; -+ } -+ if (domain0_ready && vcpu_timer_expired(dom0->exec_domain[0])) { -+ vcpu_pend_timer(dom0->exec_domain[0]); -+ //vcpu_set_next_timer(dom0->exec_domain[0]); -+ domain_wake(dom0->exec_domain[0]); -+ } -+ if (!is_idle_task(current->domain) && current->domain != dom0) { -+ if (vcpu_timer_expired(current)) { -+ vcpu_pend_timer(current); -+ // ensure another timer interrupt happens even if domain doesn't -+ vcpu_set_next_timer(current); -+ domain_wake(current); -+ } -+ } -+ raise_actimer_softirq(); -+#endif - -+#ifndef XEN - platform_timer_interrupt(irq, dev_id, regs); -+#endif - - new_itm = local_cpu_data->itm_next; - - if (!time_after(ia64_get_itc(), new_itm)) -+#ifdef XEN -+ return; -+#else - printk(KERN_ERR "Oops: timer tick before it's due (itc=%lx,itm=%lx)\n", - ia64_get_itc(), new_itm); -+#endif - -+#ifdef XEN -+// printf("GOT TO HERE!!!!!!!!!!!\n"); -+ //while(1); -+#else - profile_tick(CPU_PROFILING, regs); -+#endif - - while (1) { -+#ifndef XEN - update_process_times(user_mode(regs)); -+#endif - - new_itm += local_cpu_data->itm_delta; - -@@ -82,10 +219,16 @@ - * another CPU. We need to avoid to SMP race by acquiring the - * xtime_lock. - */ -+#ifdef TURN_ME_OFF_FOR_NOW_IA64_XEN - write_seqlock(&xtime_lock); -+#endif -+#ifdef TURN_ME_OFF_FOR_NOW_IA64_XEN - do_timer(regs); -+#endif - local_cpu_data->itm_next = new_itm; -+#ifdef TURN_ME_OFF_FOR_NOW_IA64_XEN - write_sequnlock(&xtime_lock); -+#endif - } else - local_cpu_data->itm_next = new_itm; - -@@ -105,7 +248,12 @@ - */ - while (!time_after(new_itm, ia64_get_itc() + local_cpu_data->itm_delta/2)) - new_itm += local_cpu_data->itm_delta; -+//#ifdef XEN -+// vcpu_set_next_timer(current); -+//#else -+//printf("***** timer_interrupt: Setting itm to %lx\n",new_itm); - ia64_set_itm(new_itm); -+//#endif - /* double check, in case we got hit by a (slow) PMI: */ +@@ -110,6 +114,7 @@ } while (time_after_eq(ia64_get_itc(), new_itm)); return IRQ_HANDLED; -@@ -120,6 +268,7 @@ - int cpu = smp_processor_id(); - unsigned long shift = 0, delta; - -+printf("ia64_cpu_local_tick: about to call ia64_set_itv\n"); - /* arrange for the cycle counter to generate a timer interrupt: */ - ia64_set_itv(IA64_TIMER_VECTOR); - -@@ -133,6 +282,7 @@ - shift = (2*(cpu - hi) + 1) * delta/hi/2; - } - local_cpu_data->itm_next = ia64_get_itc() + delta + shift; -+printf("***** ia64_cpu_local_tick: Setting itm to %lx\n",local_cpu_data->itm_next); - ia64_set_itm(local_cpu_data->itm_next); } ++#endif -@@ -160,6 +310,7 @@ - * frequency and then a PAL call to determine the frequency ratio between the ITC - * and the base frequency. - */ -+ - status = ia64_sal_freq_base(SAL_FREQ_BASE_PLATFORM, - &platform_base_freq, &platform_base_drift); - if (status != 0) { -@@ -212,6 +363,7 @@ + /* + * Encapsulate access to the itm structure for SMP. +@@ -212,6 +217,7 @@ + itc_freq/2)/itc_freq; if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT)) { @@ -261,7 +34,7 @@ itc_interpolator.frequency = local_cpu_data->itc_freq; itc_interpolator.drift = itc_drift; #ifdef CONFIG_SMP -@@ -228,6 +380,7 @@ +@@ -228,12 +234,14 @@ if (!nojitter) itc_interpolator.jitter = 1; #endif register_time_interpolator(&itc_interpolator); @@ -269,30 +42,15 @@ } /* Setup the CPU local timer tick */ -@@ -236,7 +389,9 @@ + ia64_cpu_local_tick(); + } ++#ifndef XEN static struct irqaction timer_irqaction = { .handler = timer_interrupt, -+#ifndef XEN .flags = SA_INTERRUPT, -+#endif - .name = "timer" - }; - -@@ -244,12 +399,16 @@ - time_init (void) - { - register_percpu_irq(IA64_TIMER_VECTOR, &timer_irqaction); -+#ifndef XEN - efi_gettimeofday(&xtime); -+#endif - ia64_init_itm(); - -+#ifndef XEN - /* - * Initialize wall_to_monotonic such that adding it to xtime will yield zero, the - * tv_nsec field must be normalized (i.e., 0 <= nsec < NSEC_PER_SEC). +@@ -253,3 +261,4 @@ */ set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec); -+#endif } ++#endif diff --git a/xen/arch/ia64/patch/linux-2.6.11/tlb.c b/xen/arch/ia64/patch/linux-2.6.11/tlb.c index 4bd3b6cf74..1a13908c62 100644 --- a/xen/arch/ia64/patch/linux-2.6.11/tlb.c +++ b/xen/arch/ia64/patch/linux-2.6.11/tlb.c @@ -1,21 +1,6 @@ - tlb.c | 10 ++++++++++ - 1 files changed, 10 insertions(+) - -Index: linux-2.6.11/arch/ia64/mm/tlb.c -=================================================================== ---- linux-2.6.11.orig/arch/ia64/mm/tlb.c 2005-03-02 01:38:38.000000000 -0600 -+++ linux-2.6.11/arch/ia64/mm/tlb.c 2005-03-19 14:58:43.978400822 -0600 -@@ -21,7 +21,9 @@ - #include - #include - #include -+#ifndef XEN - #include -+#endif - - static struct { - unsigned long mask; /* mask of supported purge page-sizes */ -@@ -43,6 +45,9 @@ DEFINE_PER_CPU(u8, ia64_need_tlb_flush); +--- ../../linux-2.6.11/arch/ia64/mm/tlb.c 2005-03-02 00:38:38.000000000 -0700 ++++ arch/ia64/tlb.c 2005-05-02 10:23:09.000000000 -0600 +@@ -43,6 +43,9 @@ void wrap_mmu_context (struct mm_struct *mm) { @@ -25,7 +10,7 @@ Index: linux-2.6.11/arch/ia64/mm/tlb.c unsigned long tsk_context, max_ctx = ia64_ctx.max_ctx; struct task_struct *tsk; int i; -@@ -83,6 +88,7 @@ wrap_mmu_context (struct mm_struct *mm) +@@ -83,6 +86,7 @@ put_cpu(); } local_flush_tlb_all(); @@ -33,7 +18,7 @@ Index: linux-2.6.11/arch/ia64/mm/tlb.c } void -@@ -132,6 +138,9 @@ EXPORT_SYMBOL(local_flush_tlb_all); +@@ -132,6 +136,9 @@ void flush_tlb_range (struct vm_area_struct *vma, unsigned long start, unsigned long end) { @@ -43,7 +28,7 @@ Index: linux-2.6.11/arch/ia64/mm/tlb.c struct mm_struct *mm = vma->vm_mm; unsigned long size = end - start; unsigned long nbits; -@@ -163,6 +172,7 @@ flush_tlb_range (struct vm_area_struct * +@@ -163,6 +170,7 @@ # endif ia64_srlz_i(); /* srlz.i implies srlz.d */ diff --git a/xen/arch/ia64/tools/mkbuildtree b/xen/arch/ia64/tools/mkbuildtree index e4bb793899..0a60d12faf 100644 --- a/xen/arch/ia64/tools/mkbuildtree +++ b/xen/arch/ia64/tools/mkbuildtree @@ -142,7 +142,7 @@ softlink arch/ia64/lib/strlen_user.S arch/ia64/lib/strlen_user.S softlink arch/ia64/lib/strncpy_from_user.S arch/ia64/lib/strncpy_from_user.S softlink arch/ia64/lib/strnlen_user.S arch/ia64/lib/strnlen_user.S #softlink arch/ia64/lib/swiotlb.c arch/ia64/lib/swiotlb.c -cp_patch arch/ia64/lib/swiotlb.c arch/ia64/lib/swiotlb.c swiotlb.c +#cp_patch arch/ia64/lib/swiotlb.c arch/ia64/lib/swiotlb.c swiotlb.c softlink arch/ia64/lib/xor.S arch/ia64/lib/xor.S softlink lib/cmdline.c arch/ia64/cmdline.c @@ -196,6 +196,8 @@ null include/asm-ia64/desc.h null include/asm-ia64/io_apic.h null include/asm-ia64/pdb.h null include/asm-ia64/module.h +null include/asm-ia64/ia32.h +null include/asm-ia64/tlbflush.h softlink include/asm-ia64/acpi.h include/asm-ia64/acpi.h softlink include/asm-ia64/asmmacro.h include/asm-ia64/asmmacro.h @@ -214,7 +216,7 @@ softlink include/asm-ia64/dma-mapping.h include/asm-ia64/dma-mapping.h softlink include/asm-ia64/errno.h include/asm-ia64/errno.h softlink include/asm-ia64/fpu.h include/asm-ia64/fpu.h softlink include/asm-ia64/hdreg.h include/asm-ia64/hdreg.h -softlink include/asm-ia64/ia32.h include/asm-ia64/ia32.h +#softlink include/asm-ia64/ia32.h include/asm-ia64/ia32.h softlink include/asm-ia64/ia64regs.h include/asm-ia64/ia64regs.h softlink include/asm-ia64/intrinsics.h include/asm-ia64/intrinsics.h softlink include/asm-ia64/ioctl.h include/asm-ia64/ioctl.h @@ -298,14 +300,15 @@ softlink include/linux/percpu.h include/asm-ia64/linux/percpu.h softlink include/linux/preempt.h include/asm-ia64/linux/preempt.h softlink include/linux/rbtree.h include/asm-ia64/linux/rbtree.h softlink include/linux/rwsem.h include/asm-ia64/linux/rwsem.h -softlink include/linux/seq_file.h include/asm-ia64/linux/seq_file.h -softlink include/linux/serial_core.h include/asm-ia64/linux/serial_core.h +#softlink include/linux/seq_file.h include/asm-ia64/linux/seq_file.h +#softlink include/linux/serial_core.h include/asm-ia64/linux/serial_core.h softlink include/linux/stddef.h include/asm-ia64/linux/stddef.h softlink include/linux/thread_info.h include/asm-ia64/linux/thread_info.h softlink include/linux/threads.h include/asm-ia64/linux/threads.h softlink include/linux/timex.h include/asm-ia64/linux/timex.h softlink include/linux/topology.h include/asm-ia64/linux/topology.h softlink include/linux/seqlock.h include/asm-ia64/linux/seqlock.h +softlink include/linux/jiffies.h include/asm-ia64/linux/jiffies.h null include/asm-ia64/linux/file.h null include/asm-ia64/linux/module.h @@ -317,12 +320,15 @@ null include/asm-ia64/linux/profile.h null include/asm-ia64/linux/seqlock.h null include/asm-ia64/linux/smp_lock.h null include/asm-ia64/linux/tty.h -null include/asm-ia64/linux/jiffies.h null include/asm-ia64/linux/kernel_stat.h null include/asm-ia64/linux/ptrace.h null include/asm-ia64/linux/random.h null include/asm-ia64/linux/signal.h null include/asm-ia64/linux/bootmem.h +null include/asm-ia64/linux/serial.h +null include/asm-ia64/linux/serial_core.h +null include/asm-ia64/linux/seq_file.h +null include/asm-ia64/linux/cpu.h softlink include/linux/byteorder/generic.h include/asm-ia64/linux/byteorder/generic.h softlink include/linux/byteorder/little_endian.h include/asm-ia64/linux/byteorder/little_endian.h diff --git a/xen/arch/ia64/xenmisc.c b/xen/arch/ia64/xenmisc.c index aac3bf8dd8..290b3296ab 100644 --- a/xen/arch/ia64/xenmisc.c +++ b/xen/arch/ia64/xenmisc.c @@ -27,7 +27,13 @@ unsigned int watchdog_on = 0; // from arch/x86/nmi.c ?!? void unw_init(void) { printf("unw_init() skipped (NEED FOR KERNEL UNWIND)\n"); } void ia64_mca_init(void) { printf("ia64_mca_init() skipped (Machine check abort handling)\n"); } -void hpsim_setup(char **x) { printf("hpsim_setup() skipped (MAY NEED FOR CONSOLE INPUT!!!)\n"); } +void ia64_mca_cpu_init(void *x) { } +void ia64_patch_mckinley_e9(unsigned long a, unsigned long b) { } +void ia64_patch_vtop(unsigned long a, unsigned long b) { } +void hpsim_setup(char **x) { } + +// called from mem_init... don't think s/w I/O tlb is needed in Xen +void swiotlb_init(void) { } long is_platform_hp_ski(void) diff --git a/xen/arch/ia64/xensetup.c b/xen/arch/ia64/xensetup.c index a15b754d68..2c24a872ea 100644 --- a/xen/arch/ia64/xensetup.c +++ b/xen/arch/ia64/xensetup.c @@ -18,9 +18,12 @@ #include #include #include +#include unsigned long xenheap_phys_end; +char saved_command_line[COMMAND_LINE_SIZE]; + struct exec_domain *idle_task[NR_CPUS] = { &idle0_exec_domain }; #ifdef CLONE_DOMAIN0 @@ -226,15 +229,15 @@ void start_kernel(void) (xenheap_phys_end-__pa(heap_start)) >> 20, (xenheap_phys_end-__pa(heap_start)) >> 10); - setup_arch(); + late_setup_arch(&cmdline); setup_per_cpu_areas(); mem_init(); printk("About to call scheduler_init()\n"); scheduler_init(); local_irq_disable(); -printk("About to call time_init()\n"); - time_init(); +printk("About to call xen_time_init()\n"); + xen_time_init(); printk("About to call ac_timer_init()\n"); ac_timer_init(); // init_xen_time(); ??? diff --git a/xen/include/asm-ia64/config.h b/xen/include/asm-ia64/config.h index c590f31423..74dbb3a4e5 100644 --- a/xen/include/asm-ia64/config.h +++ b/xen/include/asm-ia64/config.h @@ -14,8 +14,6 @@ // needed by include/asm-ia64/page.h #define CONFIG_IA64_PAGE_SIZE_16KB // 4KB doesn't work?!? #define CONFIG_IA64_GRANULE_16MB -// needed in arch/ia64/setup.c to reserve memory for domain0 -#define CONFIG_BLK_DEV_INITRD #ifndef __ASSEMBLY__ @@ -134,6 +132,7 @@ struct page; #undef ____cacheline_aligned #undef ____cacheline_aligned_in_smp #define __cacheline_aligned +#define __cacheline_aligned_in_smp #define ____cacheline_aligned #define ____cacheline_aligned_in_smp #define ____cacheline_maxaligned_in_smp @@ -237,6 +236,20 @@ void sort_main_extable(void); typedef s64 time_t; typedef s64 suseconds_t; +// needed for include/linux/jiffies.h +typedef long clock_t; + +// from include/linux/kernel.h, needed by jiffies.h +#define typecheck(type,x) \ +({ type __dummy; \ + typeof(x) __dummy2; \ + (void)(&__dummy == &__dummy2); \ + 1; \ +}) + +// from include/linux/timex.h, needed by arch/ia64/time.c +#define TIME_SOURCE_CPU 0 + // used in common code #define softirq_pending(cpu) (cpu_data(cpu)->softirq_pending) @@ -244,6 +257,13 @@ typedef s64 suseconds_t; #define SA_SHIRQ 0x04000000 #define SA_INTERRUPT 0x20000000 +// needed for setup.c +extern unsigned long loops_per_jiffy; +extern char saved_command_line[]; +struct screen_info { }; +#define seq_printf(a,b...) printf(b) +#define CONFIG_BLK_DEV_INITRD // needed to reserve memory for domain0 + // these declarations got moved at some point, find a better place for them extern int opt_noht; extern int ht_per_core; -- 2.30.2